<?php

/**
 * @param String $msg 提示信息
 * @param String $url 跳转地址
 * @return String $str 结果
 */
function ShowMsg(String $msg,$url = null)
{
    // 定义一个空字符串
    $str = '';
    if($url)
    {
        $str = "
            <script>
                alert('$msg');
                location.href = '$url';
            </script>
        ";
    }else{
        $str = "
            <script>
                alert('$msg');
                history.go(-1);
            </script>
        ";
    }

    // 调用函数直接输出
    echo $str;
}

/**
 * 预格式化数据
 * 
 * @param Array||String 数据
 *
 */
function pre($data)
{
    echo '<pre>';
    // print_r 输出数组 => echo var_dump
    print_r($data);
    echo '</pre>';
}

/**
 * 查询全部数据
 * @param String $sql Sql语句
 * @return Array 返回结果数组
*/
function all($sql)
{
    global $conn;

    $res = mysqli_query($conn,$sql);

    if(!$res)
    {
        echo 'SQL语句执行失败：' .$sql;
        exit;
    }


    $list = [];

    if($res && mysqli_num_rows($res) > 0){

        // 返回结果集的关联数组
        $list = mysqli_fetch_all($res,MYSQLI_ASSOC);
    }

    return $list;
}

/**
 * 查询单条数据
 * @param String $sql Sql语句
 * @return Array 返回结果数组
*/
function find($sql)
{
    global $conn;

    $res = mysqli_query($conn,$sql);

    if(!$res)
    {
        echo 'SQL语句执行失败：' .$sql;
        exit;
    }

    return mysqli_fetch_assoc($res);
}

// 链表查询
function leftjoin($sql){
	global $conn;
	$res = mysqli_query($conn , $sql);
	
	if(!$res){
		echo 'SQL语句执行失败：' .$sql;
		exit;
	}
	
	return mysqli_fetch_all($res);
}

// 封装查询链表职位id
function departmentid($sql){
	global $conn;
	$res = mysqli_query($conn , $sql);
	
	if(!$res){
		echo 'SQL语句执行失败：' .$sql;
		exit;
	}
	
	return mysqli_fetch_all($res);
}

// 过滤函数
function filter($id){
	if($id == 4){
		return '技术部';
	}else if($id == 5){
		return '行政部';
	}else if($id == 6){
		return '财务部';
	}
}

// 修改语句department的数据
function departmentup($sql){
	global $conn;
	$res = mysqli_query($conn , $sql);
	
	if(!$res){
		echo 'SQL语句执行失败：' .$sql;
		exit;
	}
	
	return true;
}

// 封装

/**
     * 获得随机字符串
     * @param   Number  $len    需要的长度
     * @param   Bool    $special    是否需要特殊符号
     * @return  String  返回随机字符串
     */
    function build_ranstr($len = 8, $special = false)
    {
        $chars = array(
            "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k",
            "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v",
            "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G",
            "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R",
            "S", "T", "U", "V", "W", "X", "Y", "Z", "0", "1", "2",
            "3", "4", "5", "6", "7", "8", "9"
        );

        if ($special) {
            $chars = array_merge($chars, array(
                "!", "@", "#", "$", "?", "|", "{", "/", ":", ";",
                "%", "^", "&", "*", "(", ")", "-", "_", "[", "]",
                "}", "<", ">", "~", "+", "=", ",", "."
            ));
        }

        $charsLen = count($chars) - 1;
        shuffle($chars);                            //打乱数组顺序
        $str = '';
        for ($i = 0; $i < $len; $i++) {
            $str .= $chars[mt_rand(0, $charsLen)];    //随机取出一位
        }
        return $str;
    }
	
	/**
	 * 插入数据
	 * 
	 * @param String $table 表名
	 * @param Array $data 要插入的数据
	 * @return Int $id 返回插入的自增id
	 */
	function insert($table,$data)
	{
	    global $conn;
	
	    // 表前缀
	    global $pre_;
	
	    // INSERT INTO 表名(`字段`)VALUE('值')
	
	    // 获取数组的键值作为字段
	    $key = array_keys($data);
	
	    // 数组转成字符串 把``拼接上
	    $field = "`" . implode('`,`',$key) . "`";
	
	    $values = "'" . implode("','",$data) . "'";
	
	    // 组装Sql语句
	    $sql = "INSERT INTO $pre_{$table}($field)VALUES($values)";
	
	    $result = mysqli_query($conn,$sql);
	
	    if($result)
	    {
	        // 返回插入的数据自增id => 获取该id 作为外键
	        return mysqli_insert_id($conn);
	    }else{
	        echo '错误信息：' . mysqli_error($conn) . '<br>';
	        echo 'sql语句执行失败：' . $sql;
	        exit;
	    }
	}

/**
 * 更新数据
 * 
 * @param String $table 表名
 * @param Array $data 要更新的数据
 * @param String $where 更新条件
 * @return Int 返回影响行数
*/

function update($table,$data,$where = 1)
{
    global $conn;

    // 表前缀
    global $pre_;

    // UPDATE table SET `字段` = '值' WHERE $where

    $field = '';

    foreach($data as $key => $item)
    {
        $field .= "`$key`" . '=' ."'$item',";
    }
    
    // 把右边的逗号去掉
    $field = rtrim($field,',');

    // 组装sql语句
    $sql = "UPDATE `$pre_{$table}` SET $field WHERE $where";

    $result = mysqli_query($conn,$sql);

    if($result)
    {
        // 返回影响行数
        return mysqli_affected_rows($conn);
    }else{
        echo '错误信息：' . mysqli_error($conn) . '<br>';
        echo 'sql语句执行失败：' . $sql;
        exit;
    }
}

/**
 * ajax操作成功函数
*/

function success($msg = '未知信息',$data = null,$code = 1)
{
    $result = [
        'msg' => $msg,
        'data' => $data,
        'code' => $code
    ];

    echo json_encode($result);
    exit;
}

/**
 * ajax操作失败函数
*/

function error($msg = '未知信息',$data = null,$code = 0)
{
    $result = [
        'msg' => $msg,
        'data' => $data,
        'code' => $code
    ];
	
    echo json_encode($result);
    exit;
}

/**
 * 删除某条数据
*/

function delete($table,$where)
{
    global $conn;

    global $pre_;

    $sql = "DELETE FROM `$pre_{$table}` WHERE $where";

    $result = mysqli_query($conn,$sql);

    if($result)
    {
        // 返回影响行数
        return mysqli_affected_rows($conn);
    }else{
        echo '错误信息：' . mysqli_error($conn) . '<br>';
        echo 'sql语句执行失败：' . $sql;
        exit;
    }
}
// 
/**
 * 上传图片
 * 
 * @param String $name 上传图片的字段名
 * @param Array $type 图片格式
 * @param Int $size 图片大小
 * @param String $path 存放上传后图片的路径
 */
function upload($name,$type = ['jpg', 'jpeg', 'png', 'gif'], $size = 1048576, $path = 'upload')
{

    if(!is_dir($path))
    {
        @mkdir($path);
    }

    // 返回结果
    $result = [
        'code' => 0,// 状态码 1 成功 0 失败
        'msg' => '未知信息',
        'data' => null
    ];

    $ErrorCode = $_FILES[$name]['error'];

    switch ($ErrorCode) {
        case 1:
            $result['msg'] = '上传大小不能超过upload_max_filesize设置的值';
            return $result;
            break;
        
        case 2:
            $result['msg'] = '上传大小不能超过MAX_FILE_SIZE设置的值';
            return $result;
            break;

        case 3:
            $result['msg'] = '图片上传不完整';
            return $result;
            break;
    
        case 4:
            $result['msg'] = '没有上传图片';
            return $result;
            break;
    }

    // 获取文件后缀
    $pre = pathinfo($_FILES[$name]['name'],PATHINFO_EXTENSION);

    if(!in_array($pre,$type))
    {
        $result['msg'] = '上传图片文件格式错误';
        return $result;
    }

    // 获取文件大小
    $FileSize = $_FILES[$name]['size'];

    if($FileSize > $size)
    {
        $result['msg'] = '图片文件过大，请压缩后再上传';
        return $result;
    }

    // 设置上传图片名称 20220510121989998888.jpg
    $FileName = date('YmdHis',time()) . mt_rand(1000, 9999) . mt_rand(1000, 9999) . '.' . $pre;

    // 检查http post上传
    if(is_uploaded_file($_FILES[$name]['tmp_name'])){
        move_uploaded_file($_FILES[$name]['tmp_name'],$path . '/' .$FileName);
        $result = [
            'code' => 1,
            'msg' => '上传图片成功',
            'data' => $path . '/' .$FileName
        ];

        return $result;
    }else{
        $result['msg'] = '上传图片失败';
        return $result;
    }

}


/* 
*   获取当前的网址   
*/

function get_url()
{
    // 获取当前的完整地址
    $str = $_SERVER['PHP_SELF'] . '?';

    if($_GET){
        foreach($_GET as $k => $v){
            if($k != 'page'){
                $str.= $k.'='.$v.'&';
            }
        }
    }

    return $str;

}

/** 
 * 
 * 分页函数
 * @param Int $current 当前页
 * @param Int $count   记录总数
 * @param Int $limit   每页显示多少条
 * @param Int $size    页码
 * @param String $class   样式
 * 
*/

function page($current,$count,$limit,$size,$class='digg')
{
    // 字符串 => 拼接
    $str = '';

    // 如果数据总数大于每页条数就显示分页，如果小于就不显示
    if($count > $limit)
    {
        // 算出总页数
        $pages = ceil($count / $limit);

        // 获取当前页面的url（带有参数的）
        $url = get_url();

        // 分页 => 开始拼接
        $str .= '<div class="' . $class . '">';


        // 开始页
        if($current == 1)
        {
            $str .= '<span class="disabled">首&nbsp;&nbsp;页</span>';
            $str .= '<span class="disabled">上一页</span>';
        }else{
            $str .= '<a href="'.$url.'page=1">首&nbsp;&nbsp;页</a>';
            $str .= '<a href="'.$url.'page='.($current - 1).'">上一页</a>';
        }


        // 中间页
        if($current <= floor($size / 2))
        {
            $start = 1;
            $end = $pages < $size ? $pages : $size;
        }elseif($current >= $pages - floor($size / 2))
        {
            // 2 >= 5 / 2 = 2 >= 2
            // 3 - 5 + 1 
            $start = $pages - $size + 1 <= 0 ? 1 : $pages - $size + 1;
            $end = $pages;
        }else{
            $start = $current - floor($size / 2);
            $end = $current + floor($size / 2);
        }


        for($i = $start;$i <= $end;$i++)
        {
            if($current == $i)
            {
                $str.='<span class="current">'.$i.'</span>';
            }else{
                $str.='<a href="'.$url.'page='.$i.'">'.$i.'</a>';
            }
        }


        // 结束
        if($current == $pages)
        {
            $str .= '<span class="disabled">下一页</span>';
            $str .= '<span class="disabled">尾&nbsp;&nbsp;页</span>';
        }else{
            $str .= '<a href="'.$url.'page='.($current + 1).'">下一页</a>';
            $str .= '<a href="'.$url.'page='. $pages .'">尾&nbsp;&nbsp;页</a>';
        }

        // 结束拼接
        $str .= "</div>";
    }

    return $str;
}